package com.atguigu.java1;

import java.util.Date;

/**
 *
 *      面试题：== 和 equal() 区别？
 *
 *      一：回顾 == 的使用：
 *          ==：运算符
 *              1.可以使用在基本数据类型的变量和引用数据类型的变量中
 *              2.如果比较的是基本数据类型的变量，比较2个变量保存的数据是否相等。(不一定类型要相同)
 *                如果比较的是引用数据类型的变量，比较2个对象的地址值是否相同,即2个引用是否指向同一个对象实体
 *
 *      二.equal()方法的使用
 *          1.是一个方法，而非运算符
 *          2.只能适用于引用数据类型
 *              补充：== 符号使用时，必须保证符号左右两边的变量类型一致。
 *          3.Object类中equal()的定义：
 *              public boolean equals(Object obj) {
                   return (this == obj);
               }
 *              说明：Object类中定义的equal()和 ==的作用是相同的，比较2个对象的地址值是否相同,即2个引用是否指向同一个对象实体
 *
 *           4.像String、Date、File、包装类等都重写了Object类中的equal()方法。重写以后，比较的不是2个引用的地址是否相同，
 *              而是比较2个对象的"实体内容"是否相同。
 *
 *           5.通常情况下，我们自定义的类如果使用equal()的话，也通常是比较2个实体对象的"实体内容"是否相同。那么，我们就需要对
 *              Object类中的equal()进行重写
 *              重写的原则，比较2个对象的实体内容(即：name和age)是否相同
 *
 *
 * @author : leimingchao
 * @date Date : 2021年08月27日 0:46
 */
public class EqualTest {

    public static void main(String[] args) {

        //基本数据类型
        int i = 10;
        int j = 10;
        double d = 10.0;
        System.out.println(i == j);
        System.out.println(i == d);

        boolean b = true;
        // System.out.println(b == i);

        char c = 10;
        System.out.println(i == c);


        char c1 = 'A';
        char c2 = 65;
        System.out.println(c1 == c2);

        //引用类型
        Customer customer = new Customer("Tom",21);
        Customer customer2 = new Customer("Tom",21);
        //false
        System.out.println(customer == customer2);

        String str1 = new String("atguigu");
        String str2 = new String("atguigu");
        System.out.println(str1 == str2);
        System.out.println("******************************");
        System.out.println(customer.equals(customer2));
        System.out.println(str1.equals(str2));


        Date date = new Date(123456789567L);
        Date date1 = new Date(123456789567L);

        System.out.println(date.equals(date1));
    }
}
